package com.cloud.memoryOom;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * 启动参数 -Xmx64m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
 */
public class OOMTest {

    public static void main(String[] args) {
        // 创建一个 List 用于存储对象
        List<byte[]> list = new ArrayList<>();

        // 不断创建内存对象，直到触发 OutOfMemoryError
        while (true) {
            try {
                // 每次分配 10MB 的内存
                byte[] bytes = new byte[10 * 1024 * 1024]; // 10MB
                list.add(bytes); // 将其添加到 List 中，保持引用，防止 GC
                System.out.println("Added 10MB of memory, total: " + list.size() * 10 + "MB");
            } catch (OutOfMemoryError e) {
                System.out.println("OutOfMemoryError occurred! Total objects: " + list.size());
                e.printStackTrace();
                break; // 捕获 OOM 错误并退出
            }
        }
    }
}
